package itheima_edu_info_manager.controller;


import itheima_edu_info_manager.domain.Teacher;
import itheima_edu_info_manager.service.TeacherService;

import java.util.Scanner;

public abstract class BaseTeacherController {

    private TeacherService teacherService = new TeacherService();
    private Scanner sc = new Scanner(System.in);

    //学生管理系统菜单
    public void start() {
        while (true) {

            System.out.println("--------欢迎来到 <老师> 管理系统--------");
            System.out.println("请输入您的选择: 1.添加老师  2.删除老师  3.修改老师  4.查看老师  5.退出");

            Scanner sc = new Scanner(System.in);
            String choice = sc.next();
            switch (choice) {
                case "1":
                    //System.out.println("添加学生");
                    addTeacher();
                    break;
                case "2":
                    //System.out.println("删除学生");
                    deleteTeacherById();
                    break;
                case "3":
                    //System.out.println("修改学生");
                    updateTeacher();
                    break;
                case "4":
                    //System.out.println("查看学生");
                    findAllTeacher();
                    break;
                case "5":
                    System.out.println("退出");
                    return;
                default:
                    System.out.println("您的输入有误,请重新输入");
                    break;
            }
        }
    }

    //此方法用于修改学生
    private void updateTeacher() {
        //这里使用一个变量接受是有必要的，因为inputStudentId返回的是一个可用的id，后续要多次使用同一id的话不能多次调用该方法
        String update = inputTeacherId();
        Teacher teacher = inputTeacherInfo(update);
        if (teacherService.updateTeacher(teacher, update)) {
            System.out.println("修改成功！");
        }
    }

    protected abstract Teacher inputTeacherInfo(String id);

    //此方法用于删除学生
    private void deleteTeacherById() {
        /*
            1、接收用户要删除的id
            2、调用业务员对象中的isExists方法，判断学号是否存在，不存在则继续录入
            3、调用业务员对象中的deleteStudentById方法，根据id删除学生，并提示删除成功
        */
            //这一套删除的业务是课程里的流程，比较简单
            if(teacherService.deleteTeacherById(inputTeacherId())){
                System.out.println("删除成功！");
            }
        //采用辉哥删除的业务逻辑
        /*Student[] stus = studentService.findAllStudent();
        if (stus == null) {
            System.out.println("系统暂无数据，请先添加数据！");
        } else {
            String delId = inputStudentId();
            System.out.println("您确定定要删除id为" + delId + "的学生吗？    Y  or  N");
            System.out.println("学号\t\t姓名\t年龄\t生日");
            for (int i = 0; i < stus.length; i++) {
                if (stus[i] != null && stus[i].getId().equals(delId)) {
                    System.out.println(stus[i].getId() + "\t" + stus[i].getName() + "\t" + stus[i].getAge() + "\t\t" + stus[i].getBirthday());
                }
            }
            String choice = sc.next();
            if (choice.equals("Y")) {
                if (studentService.deleteStudentById(delId)) {
                    System.out.println("删除成功！");
                }
            } else {
                System.out.println("兄弟，别激动！");
            }
        }*/
    }

    private String inputTeacherId() {
        //此方法会让用户输入一个学生数组中不存在的id并返回
        String id;
        while (true) {
            System.out.println("请输入老师的id：");
            id = sc.next();
            if (teacherService.isExists(id)) {
                return id;
            } else {
                System.out.println("未找到该老师,请重新输入");
            }
        }
    }

    //此方法用于查询学生
    private void findAllTeacher() {
        //1、调用业务员对象中的findAllStudent方法，得到学生数组
        Teacher[] teachers = teacherService.findAllTeacher();
        //2、判断数组地址是为null，如果是null，提示查无学生，不为null遍历数组，打印学生信息
        if (teachers != null) {
            System.out.println("工号\t\t姓名\t年龄\t生日");
            for (Teacher teacher : teachers) {
                if (teacher != null) {//这里一定要判断一下该索引位置是否有学生对象，否则调用getXxx方法时会有空指针异常
                    System.out.println(teacher.getId() + "\t" + teacher.getName() + "\t" + teacher.getAge() + "\t\t" + teacher.getBirthday());
                }
            }
        } else {
            System.out.println("暂无老师");
        }
    }

    //此方法用于添加学生
    private void addTeacher() {
        /*
            添加学生的步骤：
            1、方法接受用户输入的信息
            2、将学生信息封装为学生对象并传递给StudentService(业务员)中的addStudent方法
            3、根据StudentService(业务员)返回的boolean类型的结果响应给用户一些信息(在打印出成功与否的结果)

            添加功能加入学号判断:
            1、接收到学生id后，判断该id在数组中是否存在(这种判断属于业务处理，交给业务员StudentService去做)
            2、指派StudentService中判断id是否存在，调用其内部方法isExists方法，该方法返回boolean类型
                true：存在
                false：不存在
            3、接收学员id和判断的代码，使用无限循环包裹直到输入了不存在的id，结束循环
        */
        //1、接受用户输入的信息
        String id;
        while (true) {
            System.out.println("请输入id:");
            id = sc.next();
            if (teacherService.isExists(id)) {
                System.out.println("id已被占用请重新输入:");
            } else {
                break;
            }
        }

        //2、将学生信息封装为学生对象并传递给StudentService(业务员)中的addStudent方法
        //2.1 将用户输入的信息封装为一个学生对象
        Teacher teacher = inputTeacherInfo(id);
        //2.2 将这个学生对象作为参数传递给StudentService(业务员)中的addStudent方法
        //     该方法返回一个boolean类型的值
        boolean flag = teacherService.addTeacher(teacher);
        //3、根据StudentService(业务员)返回的boolean类型的结果响应给用户一些信息(在打印出成功与否的结果)
        if (flag) {
            System.out.println("添加成功！");
        } else {
            System.out.println("添加失败！");
        }
    }



}
